#include "LPR.h"
#include <stdio.h>
#include <stdlib.h>
#include "Binary_reader.h"
#include "Alumno.h"
#include "Lista.h"

#define ARCHIVO "Alumnos.bin"

Lista* Leer(const char*archivo);
void Mostrar(Lista *lista);
void Terminar (Lista *lista);
void Ordenar (Lista *lista);

int main (void)
{
    Lista *lista = Leer(ARCHIVO);
    Mostrar(lista);
    puts("-----------------------");
    Ordenar(lista);
    Mostrar(lista);
    Lista_destruir(lista,Alumno_destruir);
    BR_destruir();
}

Lista* Leer(const char*archivo)
{
    Alumno *p_alumno;
    Lista *lista = Lista_construir();

    FILE *f = fopen(archivo,"r");
    if(!f)
    {
        perror(NULL);
        fprintf(stderr, "At %s, line %d: could not read from file %s\n",
                __FILE__,
                __LINE__,
                archivo);
        exit(1);
    }
    while (1)
    {
        p_alumno = Alumno_leer (f);
        if (!p_alumno) break;
        Lista_agregar(lista,p_alumno);
    }
    fclose(f);
    return (lista);
}
void Mostrar(Lista *lista)
{
    Nodo *p;

    for (p=lista->primer; p; p = p->p_siguiente)
        Alumno_mostrar((Alumno*)(p->p_data));
}

void Ordenar (Lista *lista)
{
    Nodo *p,*q;
    Alumno *x, *y;

    for (p=lista->primer; p; p=p->p_siguiente)
    {
        for (q=p->p_siguiente; q; q = q->p_siguiente)
        {
            x = (Alumno*) p->p_data;
            y = (Alumno*) q->p_data;

            if (x->id > y->id)
            {
                p->p_data = y;
                q->p_data = x;
            }
        }
    }
}


